/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.managed;

import br.siseventos.dao.TipoPublicoDao;
import br.siseventos.model.TdTipoPublico;
import br.siseventos.service.TipoPublicoService;
import br.siseventos.view.util.CallbackHelper;
import br.siseventos.view.util.MessageHelper;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author marcosnatanpacheco
 */
@ManagedBean(name = "tipoPublicoBean")
@ViewScoped
public class TipoPublicoBean extends BaseBean {

    // Campos
    private String nome;
    private String descricao;
    private TdTipoPublico tipoPublicoSelecionado;
    private List<TdTipoPublico> lstDataTableTipoPublico;
    private TipoPublicoService tipoPublicoService;

    // Construtor
    public TipoPublicoBean() {
        // Inicializando os services
        services();
        
        // Populando o datatable
        popularDataTable();
    }

    // Getters e Setters
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public TdTipoPublico getTipoPublicoSelecionado() {
        return tipoPublicoSelecionado;
    }

    public void setTipoPublicoSelecionado(TdTipoPublico tipoPublicoSelecionado) {
        this.tipoPublicoSelecionado = tipoPublicoSelecionado;
    }

    public List<TdTipoPublico> getLstDataTableTipoPublico() {
        return lstDataTableTipoPublico;
    }

    public void setLstDataTableTipoPublico(List<TdTipoPublico> lstDataTableTipoPublico) {
        this.lstDataTableTipoPublico = lstDataTableTipoPublico;
    }
    // Actions e Listeners

    public void cadastrarTipoPublico(ActionEvent e) {
        try {
            // Cadastrando o novo tipo de público
            TdTipoPublico t = new TdTipoPublico(getNome(), getDescricao(), null);
            tipoPublicoService.incluir(t);

            // Mostrando mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de público cadastrado com sucesso!", FacesMessage.SEVERITY_INFO);

            // Repopulando a lista de tipos de público
            popularDataTable();

            // Adicionando os parâmetros de callback
            CallbackHelper.addCallback("tipoPublicoSalvo", true);
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao cadastrar tipo de público!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void excluirTipoPublico(ActionEvent e) {
        try {
            // Excluindo o tipo de publico selecionado
            tipoPublicoService.excluir(getTipoPublicoSelecionado().getIdtTipoPublico());

            // Mostrando mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de público excluído com sucesso!", FacesMessage.SEVERITY_INFO);

            // Repopulando a lista de tipos de público
            popularDataTable();
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao excluir tipo de público!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void alterarTipoPublico(ActionEvent e) {
        try {
            // Alterando o tipo de público selecionado
            tipoPublicoService.alterar(getTipoPublicoSelecionado());

            // Mostrando mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de público alterado com sucesso!", FacesMessage.SEVERITY_INFO);

            // Repopulando a lista de tipos de público
            popularDataTable();
            
            // Adicionando os parâmetros de callback
            CallbackHelper.addCallback("tipoPublicoEditado", true);
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao alterar tipo de público!", FacesMessage.SEVERITY_ERROR);
        }
    }
    // Util
    private void services(){
        tipoPublicoService = new TipoPublicoService();
    }
    private void popularDataTable() {
        try {
            // Inicializando as listas
            lstDataTableTipoPublico = tipoPublicoService.consultarTodos();
        } catch (Exception ex) {
        }
    }
}
